package com.sgcc.pda.lib_tools_database;

import android.content.Context;

import com.sgcc.pda.lib_tools_database.db.DBCore;
import com.sgcc.pda.lib_tools_database.gen.DaoSession;

/**
 * 数据库管理类
 */
public class DBMaster {

    private volatile static DBMaster mSingleton; //单例模式 初始化数据库
    private Context mContext;                    //上下文
    private DBCore mDBCore;       //初始化数据库管理类
    private boolean mIsPlugin;    //是否是插件
    private Context mHostContext; //插件模式下 宿主的Context。在初始化加密数据需要用宿主的Context

    private DBMaster() {
        mDBCore = new DBCore();
    }

    public static DBMaster getSingleton() {
        if (mSingleton == null) {
            synchronized (DBMaster.class) {
                if (mSingleton == null) {
                    mSingleton = new DBMaster();
                }
            }
        }
        return mSingleton;
    }

    /**
     * 获取上下文
     */
    public Context getContext() {
        return mContext;
    }

    /**
     * 获取插件模式下宿主App上下文
     */
    public Context getHostContext() {
        return mHostContext;
    }

    public boolean isPlugin() {
        return mIsPlugin;
    }

    /**
     * 数据库初始化
     */
    public void init(Context cxt) {
        if (cxt == null) {
            throw new IllegalArgumentException("初始化出错，上下文为空");
        }
        this.init(cxt, "");
    }

    /**
     * 数据库初始化
     *
     * @param userID 用户id  一般用来针对一个用户一个数据库，以免数据混乱问题
     */
    public void init(Context cxt, String userID) {
        init(cxt, userID, false, null);
    }

    public void init(Context cxt, String userID, boolean isPluginMode, Context hostContext) {
        if (cxt == null) {
            throw new IllegalArgumentException("初始化出错，上下文为空");
        }
        mIsPlugin = isPluginMode;
        if (isPluginMode) {
            //插件模式下必须
            if (null == hostContext) {
                throw new IllegalArgumentException("初始化出错，插件模式下宿主APP上下文为空");
            }
            mContext = cxt.getApplicationContext();
            mHostContext = hostContext;
        } else {
            mContext = cxt.getApplicationContext();
        }
        mDBCore.initCore(userID);
        mDBCore.enableQueryBuilderLog();
    }

    /**
     * 得到加密的
     */
    public DaoSession getDBEncryption() {
        return mDBCore.getDoaSessionEncryption();
    }

}
